package com.song.shiro.controller;

import com.song.shiro.result.ResultEntity;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.annotation.*;
import org.apache.shiro.subject.Subject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ShiroController {
    @GetMapping("/")
    public String index(){
        return "login";
    }

    @GetMapping("/login")
    public ResultEntity login(String username, String password){
        //创建一个shiro的subject对象，用此对象来完成用户的登录认证
        Subject subject = SecurityUtils.getSubject();
        //等处方法调用，清空登录时的缓存，否则无法重复登录
        subject.logout();
        //判断当前用户是否已经认证过，如果已完成认证则无需再次认证，否则需完成认证
        if (!subject.isAuthenticated()){
            UsernamePasswordToken token = new UsernamePasswordToken(username, password);
            subject.login(token);
        }
        return ResultEntity.success();
    }

    @GetMapping("/success")
    public String success(){
        return "success";
    }

    @GetMapping("/error")
    public String error(){
        return "error";
    }

    @GetMapping("/noPermission")
    public String noPermission(){
        return "noPermission";
    }
//
//    /**
//     * @RequiresAuthentication 表示需要认证
//     * @RequiresRoles 表示需要某些角色，logical用于多个角色时多个角色之间是AND还是OR的关系
//     * @RequiresPermissions 表示需要某些权限
//     * @return
//     */
//    @RequiresAuthentication
//    @RequiresRoles(value = {}, logical = Logical.AND)
//    @RequiresPermissions(value = {}, logical = Logical.OR)
//    @GetMapping("adminAdd")
//    public String adminAdd(){
//        Subject subject= SecurityUtils.getSubject();
//        return "这是adminAdd请求";
//    }
}
